﻿#include "Contact.h"
#include "Sqlit.h"
#include <string.h>

////初始化函数
void Conlist_init(Con_list* Con)
{
	Sqli_init(Con);
}
//销毁函数
void Conlist_destroy(Con_list* Con)
{
	Sqli_destroy(Con);
}
//添加联系人
void Conlist_add(Con_list* Con)
{
	assert(Con);
	Sqli_Setmemory(Con);

	printf("请输入您要添加联系人的姓名：");
	scanf("%s", Con->arr[Con->count].name);
	
	printf("请输入您要添加联系人的性别：");
	scanf("%s", Con->arr[Con->count].gender);

	//int age = 0;
	printf("请输入您要添加联系人的年龄：");
	scanf("%d", &(Con->arr[Con->count].age));


	printf("请输入您要添加联系人的号码：");
	scanf("%s", Con->arr[Con->count].number);
	Con->arr[Con->count].number[NUMBER - 1] = '\0';

	printf("请输入您要添加联系人的地址：");
	scanf("%s", Con->arr[Con->count].adders);
	//把添加的信息写入文本里
	Conlist_wirte(Con, Con->count);

	Con->count++;
	printf("添加完成!\n");

}

//打印一条数据
void Conlist_printOne(Con_list* Con, int i)
{
	printf("联系人%d\n", i + 1);
	printf("联系人姓名:%s\n", Con->arr[i].name);
	printf("联系人性别:%s\n", Con->arr[i].gender);
	printf("联系人年龄:%d\n", Con->arr[i].age);
	printf("联系人电话:%s\n", Con->arr[i].number);
	printf("联系人地址:%s\n", Con->arr[i].adders);
}
//打印函数
void Conlist_print(Con_list* Con)
{
	assert(Con);
	int i = 0;
	for (i = 0; i < Con->count; i++)
	{
		Conlist_printOne(Con, i);
	}
	if (i == 0)
	{
		printf("无任何联系人！\n");
	}
}
//搜索并返回查找到数据的下标
int Conlist_search(Con_list* Con, char name[NAME])
{
	
	int i = 0;
	int temp = 0;
	for (i = 0; i < Con->count; i++)
	{
		temp = strcmp(name, Con->arr[i].name);
		if (temp == 0)
		{
			return i;
		}
	}
	return -1;
}
//删除函数
void Conlist_del(Con_list* Con)
{
	assert(Con);
	char name[NAME];
	printf("请输入你要删除的联系人:");
	scanf("%s", name);
	int i;
	i = Conlist_search(Con, name);
	if (i >= 0)
	{
		Sqli_del_arbitrary(Con, i);
		//重新覆写文本数据
		Conlist_modiWrite(Con);
		printf("删除成功！\n");
		return;
	}
	printf("删除失败未找到联系人!\n");
}
//查找函数
void Conlist_Find(Con_list* Con)
{
	char name[NAME];
	printf("请输入你要查找的联系人:");
	scanf("%s", name);
	int i = 0;
	i = Conlist_search(Con, name);
	if (i >= 0)
	{
		printf("查到了!\n");
		Conlist_printOne(Con, i);
		return;
	}
	printf("未查到联系人!\n");
}
//修改函数
void Conlist_modify(Con_list* Con)
{
	char name[NAME];
	printf("请输入你要修改的联系人:");
	scanf("%s", name);
	int i = 0;
	i = Conlist_search(Con, name);
	if (i >= 0)
	{
		
		printf("请输入修改后联系人的姓名：");
		scanf("%s", Con->arr[i].name);

		
		printf("请输入修改后联系人的性别：");
		scanf("%s", Con->arr[i].gender);

		
		printf("请输入修改后联系人的年龄：");
		scanf("%d", &(Con->arr[i].age));

		
		printf("请输入修改后联系人的号码：");
		scanf("%s", Con->arr[i].number);
		Con->arr[i].number[NUMBER - 1] = '\0';
		
		printf("请输入修改后联系人的地址：");
		scanf("%s", Con->arr[i].adders);
		//重新覆写文本数据
		Conlist_modiWrite(Con);
		printf("修改完成!\n");
		return;
	}
	printf("未查到联系人!\n");
}
//追加数据函数
void Conlist_wirte(Con_list* Con,int num)
{
	FILE* fp = fopen("Contact.txt", "a");
	if (fp == NULL)
	{
		perror("Contact.txt isn't open");
	}
	fprintf(fp,"%s %s %d %s %s\n", 
		Con->arr[num].name, 
		Con->arr[num].gender,
		Con->arr[num].age,
		Con->arr[num].number,
		Con->arr[num].adders);
	fclose(fp);
}
//加载文本数据
void Conlist_readload(Con_list* Con)
{
	FILE* fp = fopen("Contact.txt", "r");
	if (fp == NULL)
	{
		perror("Contact.txt isn't open");
	}
	Sqli_Setmemory(Con);

	while (fscanf(fp, "%s %s %d %s %s\n",
		Con->arr[Con->count].name,
		Con->arr[Con->count].gender,
		&(Con->arr[Con->count].age),
		Con->arr[Con->count].number,
		Con->arr[Con->count].adders) != EOF)
	{
		Sqli_Setmemory(Con);
		Con->count++;
	}
	
	fclose(fp);
}
//覆写文本函数
void Conlist_modiWrite(Con_list* Con)
{
	FILE* fp = fopen("Contact.txt", "w");
	if (fp == NULL)
	{
		perror("Contact.txt isn't open");
	}
	
	
	int i = 0;
	for (i = 0; i < Con->count; i++)
	{
		fprintf(fp, "%s %s %d %s %s\n",
			Con->arr[i].name,
			Con->arr[i].gender,
			Con->arr[i].age,
			Con->arr[i].number,
			Con->arr[i].adders);
	}
	fclose(fp);
}
